#include <stdio.h>

#include <stdio.h>

struct Clock
{
    int hour;
    int minute;
    int second;
};
typedef struct Clock CLOCK;
void update();
void Display(CLOCK *t);
void Delay();
void Update1(struct Clock *t); // 传入指针，修改结构体变量
void Update2(struct Clock *t); // 传入指针，修改结构体变量
int hour, minute, second;

int main()
{
    long i;
    hour = minute = second = 0;
    CLOCK c = {0, 0, 0}; // 初始化结构体变量
    for (int i = 0; i < 100000; i++)
    {
        Update1(&c); // 调用 Update1 函数，传入结构体变量的地址

        Display(&c); // 调用 Display 函数，传入结构体变量的地址

        Delay();
    }

    return 0;
}
void update()
{
    second++;
    if (second == 60)
    {
        minute++;
        second = 0;
        if (minute == 60)
        {
            hour++;
            minute = 0;
        }
        if (hour == 24)
        {
            hour = 0;
        }
    }
}
// void Display()
//{
//     printf("%02d:%02d:%02d\r", hour, minute, second);
// }
//
void Display(CLOCK *t)
{
    printf("%02d:%02d:%02d\r", t->hour, t->minute, t->second);
    fflush(stdout); // 刷新输出缓冲区
}
void Delay()
{
    long t;
    for (t = 0; t < 1e9 + 1e2; t++)
    {
        ;
    }
}

// 分析两段代码：解释是如何实现时钟更新操作的

void Update1(struct Clock *t) // 传入指针，修改结构体变量
{
    static long m = 1;                     // 静态变量，记录秒数
    t->hour = m / 3600;                    // 计算小时
    t->minute = (m - 3600 * t->hour) / 60; // 通过余数计算分钟
    t->second = m % 60;                    // 计算秒数
    m++;                                   // 更新秒数
    if (t->hour == 24) // 如果小时等于24，则小时归零
    {
        m = 1;
    }
}

void Update2(struct Clock *t) // 传入指针，修改结构体变量
{
    static long m = 1;         // 静态变量，记录秒数
    t->second = m % 60;        // 计算秒数
    t->minute = (m / 60) & 60; // 通过余数计算分钟
    t->hour = (m / 3600) & 24; // 计算小时
    m++;                       // 更新秒数
    if (t->hour == 24)         // 如果小时等于24，则小时归零
    {
        m = 1;
    }
}
